package com.zcf.cft;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.zcf.common.json.Body;
import com.zcf.pojo.RechargeRecord;
import com.zcf.service.GameService;

@CrossOrigin
@Controller
@RequestMapping("/paymentCallback/")
@ResponseBody
public class PaymentCallback {
	@Autowired
	GameService g;

	// 发送充值请求
	// @PostMapping("pay") / @RequestBody RechargeRecord record
	@RequestMapping(value = "pay", produces = "application/json;charset=UTF-8")
	public void pay(HttpServletRequest request, HttpServletResponse response) {
		// Map<String, Object> remoteMap = new HashMap<String, Object>();
		// remoteMap.put("notify_url",
		// "http://order.paycheng.com/jh-web-order/order/receiveOrder");//
		// 支付成功通知地址
		String p3_money = request.getParameter("p3_money");
		// remoteMap.put("p3_money", "p3_money");// 订单金额
		String p14_customname = request.getParameter("p14_customname");
		// remoteMap.put("p14_customname", p14_customname);// 付款人在系统中的账号
		String userid = request.getParameter("userid");
		// remoteMap.put("userid", userid);// 用户id
		String p7_productcode = request.getParameter("p7_productcode");
		// remoteMap.put("p7_productcode", p7_productcode);// 终端支付方式，固定值ZFB
		String money = request.getParameter("money");
		// remoteMap.put("money", money);// 充值的钻石（房卡）数量
		String p26_ext1 = "1.1";
		// remoteMap.put("p26_ext1", p26_ext1);// 固定1.1

		// String p25_terminal = request.getParameter("p25_terminal");
		String p25_terminal = "3";
		// remoteMap.put("p25_terminal", p25_terminal);// 终端设备类型
		// p7_productcode="WX";
		String p10_bank_card_code = request.getParameter("p10_bank_card_code");
		p10_bank_card_code = "";
		// remoteMap.put("p10_bank_card_code", p10_bank_card_code);//
		// 网银或卡类编码，点卡支付填写卡类编码，网银支
		// 付则填写银行编码
		System.out.println("p10" + p10_bank_card_code + "p25" + p25_terminal);
		// 密钥
		String key = "046809182627aCBYNC2Y";// 金豆子密钥046809182627aCBYNC2Y
		// 商户应用号
		String p1_yingyongnum = "68019083310101";// 金豆子商户应用ID68019083310101
		// remoteMap.put("p1_yingyongnum", p1_yingyongnum);// 商户应用号
		// 商户订单号
		String p2_ordernumber = UtilDate.getdtlongNum();
		// remoteMap.put("p2_ordernumber", p2_ordernumber);// 商户订单号
		// 商户订单时间
		String p6_ordertime = UtilDate.getdtlongNum();
		// remoteMap.put("p6_ordertime", p6_ordertime);// 商户订单时间
		// 订单签名
		System.out.println(p1_yingyongnum + "&" + p2_ordernumber + "&" + p3_money + "&" + p6_ordertime + "&"
				+ p7_productcode + "&" + key);
		String p8_sign = MD5Tool.encoding(p1_yingyongnum + "&" + p2_ordernumber + "&" + p3_money + "&" + p6_ordertime
				+ "&" + p7_productcode + "&" + key);
		// remoteMap.put("p8_sign", p8_sign);// 订单类型
		// 签名方式
		String p9_signtype = "1";
		// remoteMap.put("p9_signtype", p9_signtype);// 订单类型
		// 付款ip地址
		String p16_customip = "106_110_114_114";
		// remoteMap.put("p16_customip", p16_customip);// 订单类型
		// 商户名称
		String p17_product = "金豆子娱乐";
		// remoteMap.put("p17_product", p17_product);// 商户名称
		String p23_charset = "UTF-8";
		// remoteMap.put("p23_charset", p23_charset);// 编码格式
		/*
		 * // 商户支付银行卡类型id String p11_cardtype; // 商户支付银行卡类型长度 String
		 * p12_channel; // 订单失效时间 String p13_orderfailertime; // 商户联系内容 String
		 * p15_customcontact; // 商品种类 String p18_productcat; // 商品数量 String
		 * p19_productnum; // 商品描述 String p20_pdesc; // 对接版本 String p21_version;
		 * // sdk版本 String p22_sdkversion; 备注 String p24_remark; String
		 * Card_Number; String Card_Password;
		 */
		// 生成订单/添加订单记录
		int state = g.addRecord_Play(p2_ordernumber, userid, p7_productcode, money, p3_money);
		System.out.println("生成订单结果state" + state);
		// return Body.newInstance(remoteMap);
		try {
			request.getRequestDispatcher("/chengfutong/choice/Post.jsp").forward(request, response);
		} catch (ServletException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// @RequestMapping("callback")/, @RequestBody RechargeRecord record
	@RequestMapping(value = "callback", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
	public void callback(HttpServletRequest request, HttpServletResponse response) {
		// 支付回调
		System.out.println("回调方法");

		String key = "046809182627aCBYNC2Y";// 密钥

		String p1_yingyongnum = "68019083310101";// 商户在成富通平台的应用 ID。

		String p2_ordernumber = request.getParameter("p2_ordernumber");// 订单号

		String p3_money = request.getParameter("p3_money");// 订单金额

		String p4_zfstate = request.getParameter("p4_zfstate");// 支付结果

		String p5_orderid = request.getParameter("p5_orderid");// 返回成富通的订单号。

		String p6_productcode = request.getParameter("p6_productcode");// 订单的支付方式。

		String p7_bank_card_code = request.getParameter("p7_bank_card_code");// 不反回

		String p8_charset = request.getParameter("p8_charset");// 商户提交订单时候传递的编码格式。

		String p9_signtype = request.getParameter("p9_signtype");// 签名验证方式

		String p10_sign = request.getParameter("p10_sign");// 验证签名

		String p11_pdesc = request.getParameter("p11_pdesc");// 样返回用户提交的
																// p20_pdesc 信息

		String str = MD5Tool.encoding(p1_yingyongnum + "&" + p2_ordernumber + "&" + p3_money + "&" + p4_zfstate + "&"
				+ p5_orderid + "&" + p6_productcode + "&" + p7_bank_card_code + "&" + p8_charset + "&" + p9_signtype
				+ "&" + p11_pdesc + "&" + key);
		try {

			if (str.equals(p10_sign)) {
				// 修改充值订单状态
				g.upRecord_Play(p2_ordernumber, 1);
				response.getWriter().write("SUCCESS");
			} else {
				// 修改充值订单状态
				g.upRecord_Play(p2_ordernumber, 2);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
